useId
🧑🏻💻 useId
useId
는 접근성 속성에 전달할 수 있는 고유 ID를 생성하기 위한 React 훅이다.
✅ useId 문법
const id = useId()
useId
는 매개변수를 사용하지 않는다.useId
는 특정 컴포넌트 내 특정useId
와 관련된 고유 ID 문자열을 반환한다.
🧑🏻💻 알고 가기
✅ 동작 원리
import { useId } from 'react';
function PasswordField() {
const passwordHintId = useId();
// ...
useId
는 컴포넌트의 최상위 수준에서 호출하여 고유한 ID를 생성한다.
✅ 언제 사용하는지
const id = useId()
<lable htmlfor={id}>const id = useId()인풋 레이블 </label>
<input id={id} type='text'/>
- label과 input tag를 연결하려고 할 때 고유한 ID 생성해서 사용한다.
✅ 공식문서 Reference 목차의 주의사항
- useId를 목록에서 키를 생성하기 위해 사용하면 안된다.
✅ 서버 렌더링과 함께 사용할 때 ID 일치 문제
서버 렌더링을 사용하면,
useId
와 클라이언트에서 동일한 컴포넌트 트리가 필요하다. 서버와 클라이언트에서 렌더링한 트리가 정확히 일치하지 않으면 생성된 ID가 일치하지 않는다.이때
useId
는 React가 서버 렌더링과 함께 작동하도록 보장한다. React 내부에서useId
는 호출한 컴포넌트의 “부모 경로”에서 생성되기 때문에 클라이언트와 서버 트리가 동일하면 렌더링 순서와 상관 없이 “부모 경로”가 일치하게 되므로, 역시 일치하게 되는 원리이다. 이를 통해 React는useId
를 호출하면 hydration이 작동하고, 서버와 클라이언트의 출력물이 서로 일치하는지 확인할 수 있다.
🧑🏻💻 활용 및 생각할 거리
✅ 여러 관련 요소에 대한 ID 생성
- 여러 관련 요소에 ID를 제공해야 하는 경우,
useId
를 호출하여 해당 요소들이 공유하는 접두사를 생성할 수 있다.import { useId } from 'react';
export default function Form() {
const id = useId();
return (
<form>
<label htmlFor={id + '-firstName'}>First Name:</label>
<input id={id + '-firstName'} type="text" />
<hr />
<label htmlFor={id + '-lastName'}>Last Name:</label>
<input id={id + '-lastName'} type="text" />
</form>
);
}
✅ key를 얻어야 할 때
- key는 형제간에 고유해야 한다.
- key는 변경되지 않아야 한다.
- key는 데이터베이스에서 데이터를 가져오는 경우, 고유한 데이터베이스 key/ID를 사용할 수 있다.
- 로컬에서 생성된 데이터는 uuid 같은 패키지를 이용해야 한다.